-
Couldn't load subscription status.
- Fork 13.9k
Implement built-in attribute macro #[cfg_eval] + some refactoring
#82682
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
r? @varkor (rust-highfive has picked a reviewer for you, use r? to override) |
…acros` This logic is applicable to two specific macros and not to the expansion infrastructure in general.
This is simpler and mirrors what invocation collector does
#[cfg_eval]#[cfg_eval] + some refactoring
|
This should be ready for review.
r? @Aaron1011 |
| /* compiler built-in */ | ||
| } | ||
|
|
||
| /// Expands all `#[cfg]` and `#[cfg_attr]` attributes in the code fragment it's applied to. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should add an example here prior to stabilization, but it doesn't need to block this PR.
|
@bors r+ |
|
📌 Commit 5d27728 has been approved by |
Implement built-in attribute macro `#[cfg_eval]` + some refactoring This PR implements a built-in attribute macro `#[cfg_eval]` as it was suggested in rust-lang#79078 to avoid `#[derive()]` without arguments being abused as a way to configure input for other attributes. The macro is used for eagerly expanding all `#[cfg]` and `#[cfg_attr]` attributes in its input ("fully configuring" the input). The effect is identical to effect of `#[derive(Foo, Bar)]` which also fully configures its input before passing it to macros `Foo` and `Bar`, but unlike `#[derive]` `#[cfg_eval]` can be applied to any syntax nodes supporting macro attributes, not only certain items. `cfg_eval` was the first name suggested in rust-lang#79078, but other alternatives are also possible, e.g. `cfg_expand`. ```rust #[cfg_eval] #[my_attr] // Receives `struct S {}` as input, the field is configured away by `#[cfg_eval]` struct S { #[cfg(FALSE)] field: u8, } ``` Tracking issue: rust-lang#82679
Implement built-in attribute macro `#[cfg_eval]` + some refactoring This PR implements a built-in attribute macro `#[cfg_eval]` as it was suggested in rust-lang#79078 to avoid `#[derive()]` without arguments being abused as a way to configure input for other attributes. The macro is used for eagerly expanding all `#[cfg]` and `#[cfg_attr]` attributes in its input ("fully configuring" the input). The effect is identical to effect of `#[derive(Foo, Bar)]` which also fully configures its input before passing it to macros `Foo` and `Bar`, but unlike `#[derive]` `#[cfg_eval]` can be applied to any syntax nodes supporting macro attributes, not only certain items. `cfg_eval` was the first name suggested in rust-lang#79078, but other alternatives are also possible, e.g. `cfg_expand`. ```rust #[cfg_eval] #[my_attr] // Receives `struct S {}` as input, the field is configured away by `#[cfg_eval]` struct S { #[cfg(FALSE)] field: u8, } ``` Tracking issue: rust-lang#82679
Implement built-in attribute macro `#[cfg_eval]` + some refactoring This PR implements a built-in attribute macro `#[cfg_eval]` as it was suggested in rust-lang#79078 to avoid `#[derive()]` without arguments being abused as a way to configure input for other attributes. The macro is used for eagerly expanding all `#[cfg]` and `#[cfg_attr]` attributes in its input ("fully configuring" the input). The effect is identical to effect of `#[derive(Foo, Bar)]` which also fully configures its input before passing it to macros `Foo` and `Bar`, but unlike `#[derive]` `#[cfg_eval]` can be applied to any syntax nodes supporting macro attributes, not only certain items. `cfg_eval` was the first name suggested in rust-lang#79078, but other alternatives are also possible, e.g. `cfg_expand`. ```rust #[cfg_eval] #[my_attr] // Receives `struct S {}` as input, the field is configured away by `#[cfg_eval]` struct S { #[cfg(FALSE)] field: u8, } ``` Tracking issue: rust-lang#82679
Implement built-in attribute macro `#[cfg_eval]` + some refactoring This PR implements a built-in attribute macro `#[cfg_eval]` as it was suggested in rust-lang#79078 to avoid `#[derive()]` without arguments being abused as a way to configure input for other attributes. The macro is used for eagerly expanding all `#[cfg]` and `#[cfg_attr]` attributes in its input ("fully configuring" the input). The effect is identical to effect of `#[derive(Foo, Bar)]` which also fully configures its input before passing it to macros `Foo` and `Bar`, but unlike `#[derive]` `#[cfg_eval]` can be applied to any syntax nodes supporting macro attributes, not only certain items. `cfg_eval` was the first name suggested in rust-lang#79078, but other alternatives are also possible, e.g. `cfg_expand`. ```rust #[cfg_eval] #[my_attr] // Receives `struct S {}` as input, the field is configured away by `#[cfg_eval]` struct S { #[cfg(FALSE)] field: u8, } ``` Tracking issue: rust-lang#82679
Rollup of 10 pull requests Successful merges: - rust-lang#82047 (bypass auto_da_alloc for metadata files) - rust-lang#82415 (expand: Refactor module loading) - rust-lang#82557 (Add natvis for Result, NonNull, CString, CStr, and Cow) - rust-lang#82613 (Remove Item::kind, use tagged enum. Rename variants to match) - rust-lang#82642 (Fix jemalloc usage on OSX) - rust-lang#82682 (Implement built-in attribute macro `#[cfg_eval]` + some refactoring) - rust-lang#82684 (Disable destination propagation on all mir-opt-levels) - rust-lang#82755 (Refactor confirm_builtin_call, remove partial if) - rust-lang#82857 (Edit ructc_ast_lowering docs) - rust-lang#82862 (Generalize Write impl for Vec<u8> to Vec<u8, A>) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This PR implements a built-in attribute macro
#[cfg_eval]as it was suggested in #79078 to avoid#[derive()]without arguments being abused as a way to configure input for other attributes.The macro is used for eagerly expanding all
#[cfg]and#[cfg_attr]attributes in its input ("fully configuring" the input).The effect is identical to effect of
#[derive(Foo, Bar)]which also fully configures its input before passing it to macrosFooandBar, but unlike#[derive]#[cfg_eval]can be applied to any syntax nodes supporting macro attributes, not only certain items.cfg_evalwas the first name suggested in #79078, but other alternatives are also possible, e.g.cfg_expand.Tracking issue: #82679